# 20240517 Created # pip install numpy # pip install opencv-python # pip install pillow # pip install pynput import numpy as np import cv2 from PIL import ImageGrab from pynput import keyboard import tkinter as tk from tkinter import filedialog, messagebox import datetime # 녹화 중지를 위한 플래그 recording = True # 녹화 중지 함수 def stop_recording(key): global recording if key == keyboard.Key.esc: recording = False return False # 화면 크기 설정 screen_size = ImageGrab.grab().size # 현재 날짜와 시간을 기반으로 파일 이름 생성 current_time = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") default_filename = f"screen_{current_time}.mp4" # 저장 경로 선택 대화상자 표시 root = tk.Tk() root.withdraw() file_path = filedialog.asksaveasfilename(defaultextension=".mp4", initialfile=default_filename, filetypes=[("MP4 files", "*.mp4")]) if file_path: # 녹화 설정 fourcc = cv2.VideoWriter_fourcc(*'mp4v') out = cv2.VideoWriter(file_path, fourcc, 20.0, screen_size) # 녹화 시작 메시지 박스 표시 messagebox.showinfo("화면 녹화", "녹화가 시작되었습니다. ESC 키를 누르면 녹화가 중지됩니다.") # 키보드 이벤트 리스너 설정 listener = keyboard.Listener(on_press=stop_recording) listener.start() while recording: # 화면 캡처 img = ImageGrab.grab() # NumPy 배열로 변환 frame = np.array(img) # 색상 공간 변환 RGB -> BGR frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) # 프레임 저장 out.write(frame) # 녹화 종료 out.release() cv2.destroyAllWindows() else: messagebox.showinfo("화면 녹화", "녹화가 취소되었습니다.")